--[[ 编码: WMS-57-11 名称: 预分配容器-入库后处理 作者:HAN 日期:2025-1-29 级别:项目 函数: PostProcess 功能: -- 检查业务来源【入库波次】中的货品是否有全部入库完成 -- 如果已经全部完成,触发【入库单】完工回报 更改记录: --]] wms_base = require ("wms_base") function PostProcess ( strLuaDEID ) local nRet, strRetInfo local pa_cntr = {} nRet, pa_cntr = m3.GetSysCurEditDataObj( strLuaDEID, "Pre_Alloc_Container" ) if (nRet ~= 0) then lua.Stop( strLuaDEID, "获取【预分配容器】对象属性失败!"..pa_cntr ) return end -- 只有对已经完成入库/5的或取消入库/6 预分配容器 进行后处理 if ( pa_cntr.b_state ~= 5 and pa_cntr.b_state ~= 6 ) then return end -- 判断来源业务(入库波次)是否可以完工 local strCondition if ( pa_cntr.bs_type == "Inbound_Wave" ) then strCondition = "F_QTY > (F_ACC_I_QTY + F_ACC_C_QTY) AND S_WAVE_NO = '"..pa_cntr.bs_no.."'" nRet, strRetInfo = mobox.getDataObjCount( strLuaDEID, "IW_Detail", strCondition ) if ( nRet ~= 0 ) then lua.Stop( strLuaDEID, "getDataObjCount失败!"..strRetInfo ) return end local nCount = lua.StrToNumber( strRetInfo ) if ( nCount == 0 ) then -- 入库波次可以完工 -- N_B_STATE = 3 入库完成 strSetAttr = "N_B_STATE = 3" strCondition = "S_WAVE_NO = '"..pa_cntr.bs_no.."'" nRet, strRetInfo = mobox.updateDataAttrByCondition( strLuaDEID, "Inbound_Wave", strCondition, strSetAttr ) if ( nRet ~= 0 ) then lua.Stop( strLuaDEID, "更新【入库波次】状态息失败!"..strRetInfo ) return end -- 设置 N_B_STATE = 3 入库单完成 nRet, strRetInfo = mobox.updateDataAttrByCondition( strLuaDEID, "Inbound_Order", strCondition, strSetAttr ) if ( nRet ~= 0 ) then lua.Stop( strLuaDEID, "更新【入库单】状态息失败!"..strRetInfo ) return end nRet, strRetInfo = wms_base.InboundWave_Finish_PostProce( strLuaDEID, pa_cntr.bs_no ) if ( nRet ~= 0 ) then lua.Stop( strLuaDEID, "WMS_InboundWave_Finish_PostProce失败!"..strRetInfo ) return end -- 触发入库波次里的【入库单】报完工 WFP strCondition = "S_NO IN ( Select S_WEO_NO From TN_IW_Compose with (NOLOCK) Where S_WAVE_NO = '"..pa_cntr.bs_no.."')" -- 找出入库波次组成的入库单 local data_objs nRet, data_objs = m3.QueryDataObject(strLuaDEID, "Inbound_Order", strCondition, "S_NO" ) if (nRet ~= 0) then lua.Stop( strLuaDEID, "QueryDataObject失败!"..data_objs ) return end if ( data_objs == '' ) then return end local n local obj_attrs local add_wfp = {} for n = 1, #data_objs do obj_attrs = m3.KeyValueAttrsToObjAttr(data_objs[n].attrs) -- 增加一个后台进程进行入库单完工回报 add_wfp = { wfp_type = 1, -- 触发数据对象事件(指定数据对象标识) cls = "入库单", obj_id = data_objs[n].id, obj_name = "入库单号'"..obj_attrs.S_NO.."'-->完工回报", trigger_event = "完工回报" } nRet, strRetInfo = m3.AddSysWFP( strLuaDEID, add_wfp ) if ( nRet ~= 0 ) then lua.Stop( strLuaDEID, "AddSysWFP失败!"..strRetInfo ) return end end end elseif ( pa_cntr.bs_type == "Inbound_Order" ) then strCondition = "F_QTY > (F_ACC_I_QTY + F_ACC_C_QTY) AND S_IO_NO = '"..pa_cntr.bs_no.."'" nRet, strRetInfo = mobox.getDataObjCount( strLuaDEID, "Inbound_Detail", strCondition ) if ( nRet ~= 0 ) then lua.Stop( strLuaDEID, "getDataObjCount失败!"..strRetInfo ) return end local nCount = lua.StrToNumber( strRetInfo ) if ( nCount == 0 ) then -- 入库单可以完工 -- N_B_STATE = 3 入库完成 strSetAttr = "N_B_STATE = 3" strCondition = "S_IO_NO = '"..pa_cntr.bs_no.."'" nRet, strRetInfo = mobox.updateDataAttrByCondition( strLuaDEID, "Inbound_Order", strCondition, strSetAttr ) if ( nRet ~= 0 ) then lua.Stop( strLuaDEID, "更新【入库单】状态失败!"..strRetInfo ) return end local inbound_order nRet, inbound_order = m3.GetDataObjectByKey( strLuaDEID, "Inbound_Order", "S_IO_NO", pa_cntr.bs_no ) if ( nRet ~= 0 ) then lua.Stop( strLuaDEID, "获取【入库单】信息失败!"..inbound_order ) return end -- 触发【入库单】报完工 WFP -- 增加一个后台进程进行入库单完工回报 local add_wfp = { wfp_type = 1, -- 触发数据对象事件(指定数据对象标识) cls = "入库单", obj_id = inbound_order.id, obj_name = "入库单号'"..pa_cntr.bs_no.."'-->完工回报", trigger_event = "完工回报" } nRet, strRetInfo = m3.AddSysWFP( strLuaDEID, add_wfp ) if ( nRet ~= 0 ) then lua.Stop( strLuaDEID, "AddSysWFP失败!"..strRetInfo ) return end end end end